Reference
- Difference between pow() and math.pow()- stackoverflow.com
- Python pow - journaldev.com
- 파이썬에서 제곱을 할때요 - edu.groom.io
- Built-in pow() - Python Documentation
- Math pow() - Python Documentation
개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
math 모듈을 살펴보다가 기본 내장함수 pow()
가 있는데 왜 굳이 math.pow()
를 정의해 뒀을까 궁금해서 검색한 내용들을 정리해봤습니다.
짧은 다큐멘터리 Youtube링크 - Powers of Ten™ (1977)를 패러디한 만화입니다
단순한 비교
두 함수의 정의를 봤을 때, 내장함수 pow()
에만 augment 하나가 더 옵션으로 들어갈 수 있는 것을 볼 수 있습니다.
pow(base, exp[, mod])
math.pow(x, y)
코드를 작성해서 확인해봐도 둘은 분명히 다른 함수인 것을 알 수 있습니다.
|
Built-in pow()
pow(base, exp)
이렇게 2개의 인자(augment)만 주어진다면 밑(base)의 지수(exp)승(또는, base의 exp제곱)한 값을 반환합니다. 반환되는 값의 자료형은 인자들의 자료형을 따라 Integer, Float, Complex number 등으로 결정됩니다.base ** exp
는 pow(base, exp)
와 똑같은 기능을 합니다.
>>> print(pow(10, 2)) |
pow(base, exp, mod)
세번째 인자[, mod]를 입력하면 base의 exp제곱한 값에 mod를 나눈 나머지 값을 반환합니다. 특히 세번째 인자가 있을 때, base와 exp는 정수형이여야 하고 exp는 양수 값이여야 합니다. pow(base, exp, mod)
를 사용하는 것이 pow(base, exp) % mod
로 계산하는 것 보다 효율적입니다.
>>> print(pow(10, 2, 3)) # 10^2 % 3 |
math.pow()
math.pow(x, y)
함수는 순수하게 거듭제곱의 연산 기능만 제공합니다.pow(base, exp)
함수 혹은 **
연산자와 다른 점으로 math.pow(x,y)
함수는 두 인자를 float 형으로 바꾼다는 점입니다.
pow(1.0, x)
이나pow(x, 0.0)
의 결과값은 무조건 1.0을 반환합니다.(x가 0이거나 NaN 값이라도)
import math |
x is inf / pow(1.0, x)= 1.0 pow(x, 0.0)= 1.0 |
pow(x, y)
에서 x와 y가 finite하고, x가 음수이고, y가 정수가 아니면 ValueError를 반환합니다.
vals = [(1.23, 3.33), (-1.23, 2.0), (-1.23, -3.33)] |
x is 1.23, y is 3.33 / 1.9924343529238528 |
수행시간 비교
# executionTime.py written in PyCharm |
**
연산자가 큰 차이로 가장 빠르고 pow()
와 math.pow()
는 비슷비슷한 시간을 가집니다.
Int \*\* Int 0.012045001 |
결론
입력되는 인자의 자료형과 상관없이 반환값을 무조건 실수형(float)으로 받고 싶을 때 math.pow()
함수를 사용하는 것이 좋습니다.
|
위 코드 결과와 같이, 정수형으로 반환되는 **
연산(혹은 pow()
) 결과를 float()
함수로 형변환 하는 것 보다 math.pow()
함수가 더 빠른 것을 볼 수 있습니다.
특별한 경우가 아니고 간단한 연산에 필요하다면 **
연산자를 사용하는 것이 가장 좋을 듯 합니다